package com.whcoding.test.common;

import com.opencsv.bean.AbstractBeanField;

import org.apache.commons.lang3.StringUtils;

import java.beans.SimpleBeanInfo;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @program: spring-boot-learning
 * @description: 类中的属性不一定都是字符串，比如数字、日期等，但是我们从csv中获取到的都是字符串，这种情况就应该使用转化器。
 * 转换器，对用注解开发
 * @author: whcoding
 * @create: 2022-03-09 15:30
 **/
public class SimpleBeanFieldConverter extends AbstractBeanField<SimpleBeanInfo> {
	@Override
	protected Object convert(String value) {
		Field f = getField();
		Date dateType = new Date();
		BigDecimal decimalType = new BigDecimal(BigDecimal.ZERO.toString());

		//1.解析时间类型判断
		if (dateType.getClass().equals(f.getType())) {
			System.out.println("开始执行解析时间类型,type:" + f.getType());
			try {
				if (StringUtils.isEmpty(value)||value.equals("")) {
					return null;
				}
				System.out.println("解析完成后的内容为" + value);
				if (value.contains("T") && value.contains("Z")) {
					return new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss").parse(value);
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}

//			//2.解析具体的字段
//			if ("updateTime".equals(f.getName()) || "testTime".equals(f.getName())) {
//				try {
//					System.out.println("开始执行解析字段类型");
//					if (StringUtils.isNotBlank(value)) {
//						System.out.println("解析完成后的内容为" + value);
//						return new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss").parse(value);
//					}
//				} catch (ParseException e) {
//					e.printStackTrace();
//				}
//			}
		}

		//处理Bigdecimal
		if (decimalType.getClass().equals(f.getType())) {
			System.out.println("开始执行解析Decimal类型,type:" + f.getType()+"value:"+value);
			if (StringUtils.isEmpty(value)||value.equals("")) {
				return null;
			}
			return new BigDecimal(value);
		}
		return null;
	}
}
